package com.itheima.d3_abstract;

/**
 * 抽象类：被abstract关键字修饰的类
 * 抽象方法：被abstract关键字修饰的方法
 *
 * 一个抽象类中可以没有抽象方法，但有抽象方法的类必定是抽象类
 *
 * 抽象类、抽象方法怎么用？
 *      1、抽象类不能直接创建对象使用
 *      2、需要写一个子类去继承抽象类，并且重写所有的抽象方法,否则子类也要变成抽象类
 */
public abstract class Animal {
    private String name;

    public Animal() {
    }

    public Animal(String name) {
        this.name = name;
    }

    //抽象方法
    public abstract void eat();
    public abstract void sleep();
    public abstract void cry();

    public void play() {
        System.out.println("动物在玩耍");
    }
}

class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫在吃鱼");
    }

    @Override
    public void sleep() {
        System.out.println("猫在睡觉");
    }

    @Override
    public void cry() {
        System.out.println("猫在喵喵喵地叫");
    }
}

class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("狗在啃骨头");
    }

    @Override
    public void sleep() {
        System.out.println("狗在睡觉");
    }

    @Override
    public void cry() {
        System.out.println("狗在汪汪汪地叫");
    }
}
